﻿using System;
using System.ServiceModel;
using System.Collections.Generic;
using Sinacor.Infra.Common.Exceptions;
using Sinacor.Infra.Service.ExceptionHandling;
using Sinacor.Infra.Service.Security.Services;
using Sinacor.Infra.Common;
using Sinacor.Infra.Common.Exceptions.FaultContracts;


namespace Sinacor.Servico.Bovespa.ManutencaoOrdens.Service.ServiceContract {

    /// <summary>
    /// Contrato de Serviço ICasamento
    /// </summary>
    [ExceptionShielding]
    [ServiceContract(Namespace = "http://www.bovespa.com.br/Sinacor.Servico.Bovespa.ManutencaoOrdens.Service.ServiceContract", SessionMode = SessionMode.Allowed, Name = "ICasamento")]
    public interface ICasamento {

		/// <summary>
		/// <b>Descrição: </b>Realiza o casamento dos negócios com as ordens informadas
		/// <b>Tabelas relacionadas:</b> PR_CASDIR.fOr_CasaDireto
		/// <b>Transacional:</b> Não
		/// </summary>
		/// <param name="request"></param>
        [OperationLog]
        [FaultContract(typeof(BusinessFault))]
        [FaultContract(typeof(ValidationFault))]
        [FaultContract(typeof(GeneralFault))]
        [FaultContract(typeof(InvalidSessionFault))]
        [FaultContract(typeof(LicensingFault))]
        [FaultContract(typeof(AccessIsDeniedFault))]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, Action = "CasarNegocios")]
        void CasarNegocios(DataContract.Request.ChaveOrdemRequest request, List<DataContract.Request.NegocioRequest> requestList);

		/// <summary>
		/// <b>Descrição: </b>Realiza o descasamento dos negócios com as ordens informadas
		/// <b>Tabelas relacionadas:</b> PR_DESDIR.fOr_DescasaDireto
		/// <b>Transacional:</b> Não
		/// </summary>
		/// <param name="request"></param>
        [OperationLog]
        [FaultContract(typeof(BusinessFault))]
        [FaultContract(typeof(ValidationFault))]
        [FaultContract(typeof(GeneralFault))]
        [FaultContract(typeof(InvalidSessionFault))]
        [FaultContract(typeof(LicensingFault))]
        [FaultContract(typeof(AccessIsDeniedFault))]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, Action = "DescasarNegocios")]
        void DescasarNegocios(List<DataContract.Request.NegocioRequest> request);

        /// <summary>
        /// Realiza o casamento dos pré-boletos de uma determinada ordem para uma
        /// determinada data de pregão
        /// </summary>
        /// <param name="request"></param>
        [OperationLog]
        [FaultContract(typeof(BusinessFault))]
        [FaultContract(typeof(ValidationFault))]
        [FaultContract(typeof(GeneralFault))]
        [FaultContract(typeof(InvalidSessionFault))]
        [FaultContract(typeof(LicensingFault))]
        [FaultContract(typeof(AccessIsDeniedFault))]
        [OperationContract(IsTerminating = false, IsInitiating = true, IsOneWay = false, Action = "CasarPreBoletos")]
        void CasarPreBoletos(DataContract.Request.FiltroPreBoletoRequest request);
	}

}